IAMユーザー・アクセスキーを作成せずにRed Hat OpenShift Service on AWS(ROSA)クラスターを作成してみた
Red Hat OpenShift Service on AWS(ROSA;ロサ)はAWSで提供されるフルマネージドなOpenShiftサービスです。
ROSAでは
- ユーザー
- Red Hat
それぞれが、AWSリソースを操作し、そのための認証情報を払い出す必要があります。
今回はIAMユーザーの作成や永続的なアクセスキーの管理が厳格な環境でもスムーズにROSAを導入できるよう、 IAMユーザー・アクセスキーを作成せずに、ROSAクラスターを作成する方法を紹介します。
1. ユーザーによるAWS操作
1つ目は自明です。
ROSAのCLIツールで ROSA クラスターを構築します。 裏では、AWS CLIが呼び出され、クラスターに必要な各種AWSリソースを作成します。
その代表格の一つは、Red Hat が ROSA クラスターを操作できるようにするための IAM リソースです。
EC2にインスタンスプロファイルをアタッチし、アクセスキー無しに AWS CLIを実行できるようにします。
2. Red Hat によるROSAクラスターへのアクセス
ROSA の大きな特徴の一つは、Red HatがAWS環境にアクセスし、クラスターの作成や運用業務を行うことです。
Red Hat OpenShift Service on AWS (ROSA) provides a model that allows Red Hat to deploy clusters into a customer’s existing Amazon Web Service (AWS) account. https://docs.openshift.com/rosa/rosa_getting_started/rosa-aws-prereqs.html
以前はIAMユーザ(osdManagedAdmin
など)・アクセスキーを発行して、クラスターへアクセスさせていましたが、現在はIAMロール・STSを使った一時トークンにも対応しています。
後者でクラスターを作成します。
IAMユーザー方式とIAMロール方式はクラスター作成時にオプションで指定します。
IAMロール・STS方式の場合、--sts
オプションを渡すだけです。
$ rosa create cluster \ --cluster-name YOUR-CLUSTER-NAME \ --sts \ --mode auto --yes
IAMユーザーを作成せずにROSAクラスターを作ってみる
以上を踏まえ、IAMユーザー・アクセスキーを作成せずに、ROSAクラスターを作成します。
全体図
1. EC2用IAMロールの作成
ROSA/AWS CLIなどのコマンドライン操作は EC2 内で行います。
アクセスキー無しにAWSのAPIを実行できるよう、EC2にインスタンスプロファイルをアタッチします。
そのIAMロールを作成します。
ドキュメントによると AdministratorAccess ポリシーが必要です。
This user has Programmatic access enabled and the AdministratorAccess policy attached to it. https://docs.openshift.com/rosa/rosa_getting_started/rosa-config-aws-account.html
- パーミッション : AdministratorAccess ポリシー
- Trusted relationships : エンティティ ec2.amazonaws.com を信頼
のIAMロールを作成します。
2. CLI実行用EC2の作成
VPC内にEC2インスタンスを起動します。
AMIにはAWS CLIとSSMエージェントがデフォルトでインストールされている Amazon Linux 2を利用します。
パブリック・プライベートサブネットがあり、NAT経由でインターネットに出られるネットワーク構成の場合、プライベートサブネットに配置します。
EC2起動ウィザードの「Step 3: Configure Instance Details」において IAM role に手順1で作成したIAMロールを指定します。
EC2 には SSM セッションマネージャーでアクセスし、SSH アクセスなどは発生しないため、セキュリティグループのインバウンドルールは不要です。
3. EC2 内にSSMセッションマネージャーでアクセス
EC2インスタンス起動後、SSM セッションマネージャーでシェルアクセスします。
インスタンスを選択し、「Connect」→「Session Manager」からシェル画面に移動します。
EC2デフォルトの ec2-user に変わります。
sh-4.2$ sudo su - ec2-user Last login: Thu Nov 18 12:23:39 UTC 2021 on pts/0 $
セッションマネージャーの利用者には、少なくとも以下のアクションを許可してください。
- ssm:StartSession
- ssm:TerminateSession
- ssm:ResumeSession
4. ROSA を有効化
AWSコンソールにアクセスし、ROSA サービスページに移動し、「Enable Openshift」ボタンをクリックして ROSA を有効にします。
5. 各種 CLI ツールのインストール
ROSA CLI の設定
ROSA が有効化されると、ROSA CLI のダウンロードリンクが表示されます。
ダウンロード用URLをコピーし、EC2 内にダウンロードします。
$ wget https://mirror.openshift.com/pub/openshift-v4/clients/rosa/latest/rosa-linux.tar.gz
展開すると、 rosa コマンドがあるため、PATH の通っているディレクトリに移動します。
$ tar zxfv rosa-linux.tar.gz rosa $ sudo cp rosa /usr/local/bin/ $ rosa version 1.1.5
ROSA との疎通
$ rosa login
コマンドを叩き、Red Hat のポータルサイトにアクセスし、トークンを取得し、認証します。
$ rosa login To login to your Red Hat account, get an offline access token at https://console.redhat.com/openshift/token/rosa ? Copy the token and paste it here: *** : Logged in as '[email protected]' on 'https://api.openshift.com'
AWS CLI の設定
ROSA CLI は内部的に AWS CLI を呼び出しています。
$ rosa whoami E: failed to create AWS client: Region is not set. Use --region to set the region
パット見ではわかりにくいですが、このエラーは AWS CLI のリージョン設定不足に起因します。
$ aws ec2 describe-instances You must specify a region. You can also configure your region by running "aws configure".
AWS CLI のリージョン設定をします。
$ aws configure set default.region ap-northeast-1
デプロイ先リージョンに合わせて ap-northeast-1
(東京) の部分を変更して下さい。
この状態でもう一度 $ rosa whoami
すると、成功します。
$ rosa whoami AWS Account ID: 123 AWS Default Region: eu-west-1 AWS ARN: arn:aws:iam::123:role/EC2Rosa OCM API: https://api.openshift.com OCM Account ID: xxx OCM Account Name: John Smith OCM Account Username: [email protected] OCM Account Email: [email protected] OCM Organization ID: XXX OCM Organization Name: CLASSMETHOD,INC. OCM Organization External ID: XXX
AWSのクオータに引っかかっていないことを確認します。
$ rosa verify quota I: Validating AWS quota... I: AWS quota ok. If cluster installation fails, validate actual AWS resource usage against https://docs.openshift.com/rosa/rosa_getting_started/rosa-required -aws-service-quotas.html
OpenShift CLI の設定
最後に OpenShiftのCLIツール oc
/kubectl
をインストールします。
rosa コマンド経由でダウンロードし、展開します。
$ rosa download oc I: Verifying whether OpenShift command-line tool is available... W: OpenShift command-line tool is not installed. Run 'rosa download oc' to download the latest version, then add it to your PATH. ... I: Successfully downloaded openshift-client-linux.tar.gz $ tar zxfv openshift-client-linux.tar.gz README.md oc kubectl $ sudo cp kubectl oc /usr/local/bin/ $ oc version Client Version: 4.9.7
正しくインストールされていることを確認します。
$ rosa verify openshift-client I: Verifying whether OpenShift command-line tool is available... I: Current OpenShift Client Version: 4.9.7
6. Red Hat向けIAMロールを作成
本アカウントでSTS ベースのROSAを初めて作成する場合、次のコマンドを実行し、IAMロールを作成します。
$ rosa create account-roles --mode auto --yes I: Logged in as '[email protected]' on 'https://api.openshift.com' I: Validating AWS credentials... I: AWS credentials are valid! ... I: Creating account roles I: Creating roles using 'arn:aws:iam::123:role/EC2Rosa' I: Created role 'ManagedOpenShift-Installer-Role' with ARN 'arn:aws:iam::123:role/ManagedOpenShift-Installer-Role' I: Created role 'ManagedOpenShift-ControlPlane-Role' with ARN 'arn:aws:iam::123:role/ManagedOpenShift-ControlPlane-Role' I: Created role 'ManagedOpenShift-Worker-Role' with ARN 'arn:aws:iam::123:role/ManagedOpenShift-Worker-Role' I: Created role 'ManagedOpenShift-Support-Role' with ARN 'arn:aws:iam::123:role/ManagedOpenShift-Support-Role' I: Created policy with ARN 'arn:aws:iam::123:policy/ManagedOpenShift-openshift-machine-api-aws-cloud-credentials' I: Created policy with ARN 'arn:aws:iam::123:policy/ManagedOpenShift-openshift-cloud-credential-operator-cloud-crede' I: Created policy with ARN 'arn:aws:iam::123:policy/ManagedOpenShift-openshift-image-registry-installer-cloud-creden' I: Created policy with ARN 'arn:aws:iam::123:policy/ManagedOpenShift-openshift-ingress-operator-cloud-credentials' I: Created policy with ARN 'arn:aws:iam::123:policy/ManagedOpenShift-openshift-cluster-csi-drivers-ebs-cloud-credent' I: To create a cluster with these roles, run the following command: rosa create cluster --sts
6行目から、EC2にアタッチしたIAMロールでリソース作成していることがわかります。
また、7行目以降から、ROSAクラスター向けのIAMロール・ポリシーを作成しているのがわかります。
次のRed Hat のブログから、各ロールの用途を抜粋します。
Creating a ROSA Cluster Using STS
ロール名 | 信頼されたエンティティ | 用途 |
---|---|---|
ManagedOpenShift-ControlPlane-Role | AWS Service: ec2 | コントロールプレーンEC2用 |
ManagedOpenShift-Worker-Role | AWS Service: ec2 | ワーカーノードEC2用 |
ManagedOpenShift-Installer-Role | Red HatのAWSアカウントID | クラスターのインストール・削除用 |
ManagedOpenShift-Support-Role | Red HatのAWSアカウントID | Red Hat SREチーム用 |
※ブログ内の「ManagedOpenShift-IAM-Role」を「ManagedOpenShift-Installer-Role」に読み替えています。
気になるのは、SRE チームが利用する ManagedOpenShift-Support-Role ロールに許可されたアクションです。
ポリシー ManagedOpenShift-Support-Role-Policy
を確認すると、
- CloudTrail
- CloudWatch
- EC2
- elasticloadbalancing
- Route53
- S3
に対する操作が許可されていました。
そのほとんどは参照系アクションですが、EC2 だけは以下の更新系アクションが許可されていました。
- スナップショット
- インスタンスの起動・再起動・ターミネート
IAMポリシーのリソースの記述は "Resource": "*"
とあるため、理論的には非ROSAクラスターのEC2も操作可能です。
7. STS ベースのROSAクラスターを作成
ようやく本題です。
STS ベースのROSAクラスターを作成するには $ rosa create cluster
コマンドに --sts
オプションを渡します。
$ rosa create cluster \ --cluster-name my-rosa-cluster \ --sts \ --mode auto --yes I: Using arn:aws:iam::123:role/ManagedOpenShift-Installer-Role for the Installer role I: Using arn:aws:iam::123:role/ManagedOpenShift-ControlPlane-Role for the ControlPlane role I: Using arn:aws:iam::123:role/ManagedOpenShift-Worker-Role for the Worker role I: Using arn:aws:iam::123:role/ManagedOpenShift-Support-Role for the Support role I: Creating cluster 'my-rosa-cluster' ...
40分程度待ち、クラスターのステートが installing
から ready
になれば、インストールの完了です。
$ rosa list clusters ID NAME STATE xxx my-rosa-cluster ready
STS 方式でクラスター作成した場合、クラスター固有の運用ロールも同時に作成されます。
$ rosa describe cluster -c my-rosa-cluster ... Operator IAM Roles: - arn:aws:iam::123:role/my-rosa-cluster-aaaa-openshift-ingress-operator-cloud-credential - arn:aws:iam::123:role/my-rosa-cluster-aaaa-openshift-cluster-csi-drivers-ebs-cloud-cre - arn:aws:iam::123:role/my-rosa-cluster-aaaa-openshift-machine-api-aws-cloud-credentials - arn:aws:iam::123:role/my-rosa-cluster-aaaa-openshift-cloud-credential-operator-cloud-c - arn:aws:iam::123:role/my-rosa-cluster-aaaa-openshift-image-registry-installer-cloud-cr ...
詳細は次のドキュメントを参照ください。
Cluster-specific Operator IAM role reference
8. 管理ユーザーの作成
クラスターの管理者を作成します。
$ rosa create admin --cluster=my-rosa-cluster W: It is recommended to add an identity provider to login to this cluster. See 'rosa create idp --help' for more information. I: Admin account has been added to cluster 'my-rosa-cluster'. I: Please securely store this generated password. If you lose this password you can delete and recreate the cluster admin user. I: To login, run the following command: oc login https://api.my-rosa-cluster.xxx.p1.openshiftapps.com:6443 --username cluster-admin --password zzz I: It may take up to a minute for the account to become active.
oc
コマンドでクラスターにログインします。
rosa create
のコマンド結果には I: It may take up to a minute for the account to become active. とありますが、
私の場合、ログインが成功するまで、5分程度かかりました。
ログインが成功するまで、気長に待ちましょう。
$ oc login https://api.my-rosa-cluster.xxx.p1.openshiftapps.com:6443 --username cluster-admin --password zzz The server uses a certificate signed by an unknown authority. You can bypass the certificate check, but any data you send to the server could be intercepted by others. Use insecure connections? (y/n): yes Login successful. You have access to 88 projects, the list has been suppressed. You can list all projects with 'oc projects' Using project "default". Welcome! See 'oc help' to get started.
9. クラスターを削除
ROSAの検証が完了したら、クラスターを削除します。
まずは、クラスターを削除します。
$ rosa delete cluster --cluster <cluster-name> ? Are you sure you want to delete cluster my-rosa-cluster? Yes I: Cluster 'my-rosa-cluster' will start uninstalling now I: Your cluster 'my-rosa-cluster' will be deleted but the following object may remain I: Operator IAM Roles: - arn:aws:iam::123:role/my-rosa-cluster-t5w0-openshift-ingress-operator-cloud-credential - arn:aws:iam::123:role/my-rosa-cluster-t5w0-openshift-cluster-csi-drivers-ebs-cloud-cre - arn:aws:iam::123:role/my-rosa-cluster-t5w0-openshift-machine-api-aws-cloud-credentials - arn:aws:iam::123:role/my-rosa-cluster-t5w0-openshift-cloud-credential-operator-cloud-c - arn:aws:iam::123:role/my-rosa-cluster-t5w0-openshift-image-registry-installer-cloud-cr I: OIDC Provider : https://rh-oidc.s3.us-east-1.amazonaws.com/zzz I: Once the cluster is uninstalled use the following commands to remove the above aws resource. rosa delete operator-roles -c AAA rosa delete oidc-provider -c AAA I: To watch your cluster uninstallation logs, run 'rosa logs uninstall -c my-rosa-cluster --watch'
コマンドの実行結果にあるように、この削除操作では EC2 や ELB などは削除されますが、
- OIDC プロバイダー
- STS用IAMロール・ポリシー
は削除されません。
クラスターID(クラスター名ではないことに注意)を指定し、手動で削除します。
OIDC プロバイダーは、次のコマンドで削除します。
$ rosa delete oidc-provider -c <clusterID> --mode auto --yes ? OIDC provider deletion mode: auto ? Delete the OIDC provider 'arn:aws:iam::123:oidc-provider/rh-oidc.s3.us-east-1.amazonaws.com/xxx'? Yes
次に、クラスター固有の運用ロールを削除します。
$ rosa delete operator-roles -c <clusterID> --mode auto --yes ? Operator roles deletion mode: auto I: Fetching operator roles for the cluster: 1ohvnhp7e3pr9103klecb9eebtclalmo ? Delete the operator roles 'my-rosa-cluster-X-openshift-cloud-credential-operator-cloud-c'? Yes ? Delete the operator roles 'my-rosa-cluster-X-openshift-cluster-csi-drivers-ebs-cloud-cre'? Yes ? Delete the operator roles 'my-rosa-cluster-X-openshift-image-registry-installer-cloud-cr'? Yes ? Delete the operator roles 'my-rosa-cluster-X-openshift-ingress-operator-cloud-credential'? Yes ? Delete the operator roles 'my-rosa-cluster-X-openshift-machine-api-aws-cloud-credentials'? Yes
アカウント固有のROSAロールを削除
STSベースのROSAクラスター作成の準備として、 コマンド $ rosa create account-roles --mode auto --yes
を実行し、ManagedOpenShift-Support-Role
など4つのIAMロールを作成しました。
本アカウントにおいて、ROSA クラスターと永遠のお別れをする場合、次のコマンドを実行して、これらロールも削除してください。
$ rosa delete account-roles --prefix ManagedOpenShift --mode auto --yes $
他の rosa delete
系コマンドと異なり、Y/n の確認を挟まずにいきなり削除されます。
ご注意ください。
最後に
ROSA の運用では
- ユーザー
- Red Hat
それぞれが AWSリソースを操作します。
前者は インスタンスプロファイルをアタッチしたEC2から操作、後者は STSモードのRosaクラスターを作成することで、 IAMユーザー・アクセスキーを作成せずに、ROSA クラスターを構築できます。
IAMユーザーのアクセスキーは永続的な上、アクセスキーの配置も必要です。 IAMロール/STSの一時トークンを利用することで、よりセキュアに認証情報を管理・運用できます。
ぜひ、ご検討ください。